package proc

import (
	"time"
)

// PID 进程编号对象
type PID int

// Int 获取进程编号
func (id PID) Int() int {
	return int(id)
}

// Interrupt 发送Ctrl+C信号
func (id PID) Interrupt() error {
	if id <= 0 {
		return nil
	}
	return id.interrupt()
}

// Terminate 终止进程
func (id PID) Terminate() error {
	if id <= 0 {
		return nil
	}
	return id.terminate()
}

// Kill 强制终止进程
func (id PID) Kill() error {
	if id <= 0 {
		return nil
	}
	return id.kill()
}

func (id PID) stop(wait <-chan struct{}) (err error) {
	for _, kill := range [3]func() error{id.Interrupt, id.Terminate, id.Kill} {
		err = kill()
		select {
		case <-wait:
			return
		case <-time.After(time.Millisecond * 500):
		}
	}
	return
}
